#ifndef __STATISTICS_H__
#define __STATISTICS_H__

////////////////////////////////////////////////////////////////////////////////
// Includes
////////////////////////////////////////////////////////////////////////////////

#include <vector>
#include <cmath>

////////////////////////////////////////////////////////////////////////////////
// Namespaces
////////////////////////////////////////////////////////////////////////////////

namespace Toolkit  {

////////////////////////////////////////////////////////////////////////////////
// Implementation
////////////////////////////////////////////////////////////////////////////////

// Light C style interface
#define Average		Statistics::GetAverage
#define StdDevAve	Statistics::GetStandardDeviationGivenAverage

/**
 *  This class provides conversion function
 */
class Statistics {
	
	public:

		static const double GetAverage(const std::vector<double> & data) {
			if (data.size() == 0) return 0.;
			double sum = 0.;
			for (unsigned int i=0; i<data.size(); ++i)
				sum += data[i];
			return sum /= (double)data.size();
		}

		static const double GetStandardDeviationGivenAverage(const std::vector<double> & data, double average) {
			if (data.size() == 0) return 0.;
			double sq_ave_dist = 0.;
			for (unsigned int i=0; i<data.size(); ++i)
				sq_ave_dist += pow(data[i] - average, 2);
			return sqrt(sq_ave_dist/((double)data.size()));
		}

};

////////////////////////////////////////////////////////////////////////////////
// Closing Namespaces
////////////////////////////////////////////////////////////////////////////////

}

////////////////////////////////////////////////////////////////////////////////

#endif

